Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Buonasera,
sto studiando il c++ alle superiori e in particolare le liste statiche e dinamiche(coda e pila). Mi è stato assegnato il compito di scrivere una funzione che permetta di visualizzare tutti gli elementi presenti in uno stack dinamico. Visto che abbiamo studiato anche le funzioni ricorsive, mi è stato suggerito di richiamare un'altra funzione che sia ricorsiva a se stessa del tipo:
Codice sorgente - presumibilmente C/C++
void f1 (stack s)
{
........
f2(s.testa) /*ricorsiva a se stessa*/
.....
}
Visto che nella funzione di visualizzazione di uno stack dinamico è presente un'iterazione e una funzione ricorsiva può sostituire l'iterazione ho pensato a queste due funzioni:
Codice sorgente - presumibilmente C/C++
bool visstack (stack s)
{
bool ris=false;
nodo *n;
n=s.testa;
if(!(stackvuoto(s)))
{
ris=true;
f1_ricorsiva (s.testa);
}
return ris;
}
Codice sorgente - presumibilmente C/C++
void f1_ricorsiva (nodo *p)
{
bool ris=false;
if((p->next!=NULL)||(ris=true))
{
ris=true;
viselemento (p->info);
f1_ricorsiva (p->next);
}
return;
}
Quando vado a compilare il progetto non ci sono errori di compilazione, ma quando vado a richiamare la funzione di visualizzazione, la visualizzazione va a buon fine, cioè riesco a visualizzare tutti gli elementi che ho inserito precedentemente, ma il compilatore crasha.
Dov'è il problema?
Grazie,
Fe10.
Ultima modifica effettuata da Fe10 il 06/02/2012 alle 22:06
altrimenti l'OR risulta sempre verificato.
Comunque cosi come è fatta f1_ricorsiva ris è inutile
Ma senza quella condizione ris==true, con i vari esperimenti, non mi si chiudevano le funzioni. L'ho messo solo per far si che ritorni alla funzione di partenza...
EDIT: il programma crasha comunque in fase di visualizzazione...
Ultima modifica effettuata da Fe10 il 07/02/2012 alle 15:37
Ho anche notato che l'ultimo elemento non ti verrà mai visualizzato (se ti viene visualizzato allora probabilmente (p->next!=NULL) viene verificata anche quando sei in fondo allo stack, ma se sei all'ultimo elemento, p->next non dovrebbe puntare a nulla.
Prova a postare il codice relativo allo stack
ps. per la funzione ricorsiva ti consiglio di fare qualcosa del tipo
Codice sorgente - presumibilmente C/C++
if( p == NULL )return;
viselemento (p->info);
f1_ricorsiva (p->next);
Ultima modifica effettuata da andrex91 il 08/02/2012 alle 9:38